﻿Imports System.IO
Imports System.Data
Imports MetodosComuns
Imports extranet.BC
Imports extranet.BE
Imports System.Collections.Generic
Imports EnhancedFileUpload

Partial Class Videos
  Inherits System.Web.UI.Page

  Private intVideoWidth As Integer
  Private intVideoHeight As Integer

  Private Const DEBUG As Boolean = False
  ' Inicializar parâmetros da Página
  Private Const TITULO_PAGINA As String = "Vídeos"
  Private Const TITULO_REGISTROS As String = "VÍDEOS CADASTRADOS"
  Private Const TITULO_REGISTRO_DETALHE As String = "DETALHES DO VÍDEO"
  Private Const TITULO_REGISTRO_EDICAO As String = "ALTERAR VÍDEO"
  Private Const TITULO_REGISTRO_CADASTRO As String = "CADASTRO DE VÍDEO"
  Private Const MESSAGE_INSERIDO_COM_SUCESSO As String = "O Vídeo foi Cadastrado com Sucesso!"
  Private Const MESSAGE_ALTERADO_COM_SUCESSO As String = "O Vídeo foi Alterado com Sucesso!"
  Private Const MESSAGE_EXCLUIDO_COM_SUCESSO As String = "O Vídeo foi Excluído com Sucesso!"
  Private Const MESSAGE_ERRO_NA_INSERCAO As String = "Erro na inserção do Registro!."
  Private Const MESSAGE_ERRO_NA_ALTERACAO As String = "Erro na atualização do Registro!."
  Private Const MESSAGE_ERRO_NA_EXCLUSAO As String = "Erro na exclusão do Registro!."

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    '==================       PROCEDIMENTO  PADRÃO  SEGURANÇA     =============================
    Dim objBESeguranca As BESeguranca
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    If IsNothing(objBEUsuario) Then Response.Redirect(TELA_LOGOUT)
    Session("strTela") = MetodosComuns.GetCurrentPageName()
    If Not IsPostBack Then          ' SEGURANÇA
      objBESeguranca = BCSeguranca.SelecionaPermissoes(objBEUsuario.GrupoAcesso, Session("strTela"))
      If Not objBESeguranca.Autorizado Then Response.Redirect(TELA_LOGOUT)
      Session("objBESeguranca") = objBESeguranca
    Else
      objBESeguranca = Session("objBESeguranca")
    End If

    '==================       ALTERAR SE FOR NECESSARIO          ===============================
    If Not IsPostBack Then
      ddlCategoria.DataSource = BCCategoriaVideo.Selecionar("", "", "")
      ddlCategoria.DataBind()
      Session("posicaoVideosRecentes") = 0
      Session("posicaoVideosPopulares") = 0
      Dim arrListVideos As New ArrayList()
      For intI As Integer = 0 To 5
        arrListVideos.Add(0)
      Next
      Session("posicaoVideos") = arrListVideos
      mostraPaineis(ESTADO_INICIAL)
    End If

  End Sub

  Protected Sub mostraPaineis(ByVal estado As Int16)
    Dim objBESeguranca As BESeguranca = DirectCast(Session("objBESeguranca"), BESeguranca)

    ' SEGURANÇA
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        If Not objBESeguranca.Leitura Then estado = IIf(objBESeguranca.Escrita, ESTADO_CADASTRO, ESTADO_BLOQUEADO)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
        If Not objBESeguranca.Escrita Then estado = IIf(objBESeguranca.Leitura, ESTADO_LISTA, ESTADO_BLOQUEADO)
    End Select

    ' Mostra Painel segundo o estado
    If Not DEBUG Then
      Select Case estado
        Case ESTADO_BLOQUEADO
          panBuscaRegistro.Visible = False
          pangrvRegistros.Visible = False
          pandtvRegistro.Visible = False
        Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
          panBuscaRegistro.Visible = True
          pangrvRegistros.Visible = True
          pandtvRegistro.Visible = False
        Case ESTADO_DETALHE, ESTADO_EDICAO, ESTADO_CADASTRO
          panBuscaRegistro.Visible = False
          pangrvRegistros.Visible = False
          pandtvRegistro.Visible = True
      End Select
    Else
      panBuscaRegistro.Visible = True
      pangrvRegistros.Visible = True
      pandtvRegistro.Visible = True
    End If

    ' Set Registro(s) segundo o estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        btnVoltar.Visible = False
        mostraRegistros()
      Case ESTADO_DETALHE, ESTADO_EDICAO
        btnVoltar.Visible = True
        mostraRegistro()
      Case ESTADO_CADASTRO
    End Select

    ' Set Focus segundo o Estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        scriptManager.SetFocus(txtVideo)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
    End Select

  End Sub

  Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub imageButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim objImagemVideo As ImageButton = sender
    Dim intPos As Integer = objImagemVideo.ID.Substring(objImagemVideo.ID.LastIndexOf("_") + 1)
    Dim arrIdVideo As ArrayList = Session("posicaoVideos")
    If intPos >= 0 AndAlso arrIdVideo IsNot Nothing AndAlso arrIdVideo.Count > 0 Then
      Session("idVideo") = arrIdVideo(intPos)
      mostraPaineis(ESTADO_DETALHE)
    Else
      Session("idVideo") = Nothing
    End If
  End Sub

  Protected Sub btnVoltar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVoltar.Click
    Session("idVideo") = Nothing
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Property VideoWidth() As Integer
    Get
      Return intVideoWidth
    End Get
    Set(ByVal value As Integer)
    End Set
  End Property

  Protected Property VideoHeight() As Integer
    Get
      Return intVideoHeight
    End Get
    Set(ByVal value As Integer)
    End Set
  End Property

  Protected Sub mostraRegistros()
    mostraRecentes()
    mostraPopulares()
  End Sub

  Protected Sub mostraRegistro()
    Dim intIdVideo As Integer = Session("IdVideo")
    If intIdVideo > 0 Then
      Dim objBEVideo As BEVideo
      If intIdVideo = 0 Then
        objBEVideo = BCVideo.SelecionarUltimoVideo()
        intIdVideo = objBEVideo.IdVideo
      Else
        BCVideo.Ranking(intIdVideo)
        objBEVideo = BCVideo.Selecionar(intIdVideo)(0)
      End If
      Dim intVideoWidth As Integer = objBEVideo.Width
      Dim intVideoHeight As Integer = objBEVideo.Height
      CalculaDimensionesProporcionais(intVideoWidth, intVideoHeight, VIDEO_WIDTH, VIDEO_HEIGHT)
      ' Display do Vídeo Principal Selecionado
      divVideoPrincipal.InnerHtml = _
        "<h2>" & objBEVideo.Titulo & "</h2>" & _
        "<object id=""vp_Video"" type=""application/x-shockwave-flash"" data=""Players/player_flv_maxi.swf"" " & _
          "width=""" & VIDEO_WIDTH & """ height=""" & VIDEO_HEIGHT & """>" & _
          "<param name=""movie"" value=""Players/player_flv_maxi.swf"" />" & _
          "<param name=""allowFullScreen"" value=""true"" />" & _
          "<param name=""FlashVars"" value=""configxml=xml/" & objBEVideo.Video & ".xml"" />" & _
        "</object><br/>" & _
        "<div style=""text-align:left;""><strong>" & objBEVideo.Ranking & " exibições</strong><br/>" & objBEVideo.Descricao & "</div><br/>"
    Else
      divVideoPrincipal.InnerHtml = ""
    End If

  End Sub

  Protected Sub ib_backRecentes_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim posicao As Integer = Session("posicaoVideosRecentes")
    If posicao - 3 < 0 Then
      Session("posicaoVideosRecentes") = 0
    Else
      Session("posicaoVideosRecentes") = posicao - 3
    End If
    mostraRecentes()
  End Sub

  Protected Sub ib_nextRecentes_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim posicao As Integer = Session("posicaoVideosRecentes")
    If posicao + 3 < 0 Then
      Session("posicaoVideosRecentes") = 0
    Else
      Session("posicaoVideosRecentes") = posicao + 3
    End If
    mostraRecentes()
  End Sub

  Protected Sub ib_backPopulares_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim posicao As Integer = Session("posicaoVideosPopulares")
    If posicao - 3 < 0 Then
      Session("posicaoVideosPopulares") = 0
    Else
      Session("posicaoVideosPopulares") = posicao - 3
    End If
    mostraPopulares()
  End Sub

  Protected Sub ib_nextPopulares_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim posicao As Integer = Session("posicaoVideosPopulares")
    If posicao + 3 < 0 Then
      Session("posicaoVideosPopulares") = 0
    Else
      Session("posicaoVideosPopulares") = posicao + 3
    End If
    mostraPopulares()
  End Sub

  Protected Sub mostraRecentes()
    Dim posicao As Integer = Session("posicaoVideosRecentes")
    Dim arrIdVideo As ArrayList = Session("posicaoVideos")
    Dim objBEVideos As List(Of BEVideo)
    Dim objBEVideo As BEVideo
    Dim booMostra As Boolean
    Dim intImagem As Integer = 0
    ' Últimos Vídeos
    objBEVideos = BCVideo.Selecionar(txtVideo.Text, _
                                     IIf(ddlCategoria.SelectedValue = "0", "", ddlCategoria.SelectedItem.Text), _
                                     "", "v.id_video", "DESC")
    While posicao > objBEVideos.Count() - 1 AndAlso posicao > 0
      posicao -= 3
      If posicao < 0 Then posicao = 0
    End While
    Session("posicaoVideosRecentes") = posicao
    For intI As Integer = posicao To posicao + 2
      booMostra = (intI < objBEVideos.Count())
      If booMostra Then
        objBEVideo = objBEVideos(intI)
        arrIdVideo(intImagem) = objBEVideo.IdVideo
      Else
        objBEVideo = Nothing
        arrIdVideo(intImagem) = 0
      End If

      With DirectCast(pangrvRegistros.FindControl("ib_imagem_0" & intImagem), ImageButton)
        If booMostra Then
          .ImageUrl = "~/videos/showThumbImage.aspx?nome=" & IIf(objBEVideo.Imagem.ToString().Length() > 0, objBEVideo.Imagem, "SemImagem.jpg")
        Else
          .ImageUrl = ""
        End If
        .Visible = booMostra
      End With
      With DirectCast(pangrvRegistros.FindControl("lbl_titulo_0" & intImagem), Label)
        If booMostra Then
          .Text = objBEVideo.Titulo
        Else
          .Text = ""
        End If
        .Visible = booMostra
      End With
      intImagem += 1
    Next
    DirectCast(pangrvRegistros.FindControl("ib_backRecentes"), ImageButton).Enabled = (posicao - 3 >= 0)
    DirectCast(pangrvRegistros.FindControl("ib_nextRecentes"), ImageButton).Enabled = (posicao + 3 <= objBEVideos.Count() - 1)
    Session("posicaoVideos") = arrIdVideo
  End Sub

  Protected Sub mostraPopulares()
    Dim posicao As Integer = Session("posicaoVideosPopulares")
    Dim arrIdVideo As ArrayList = Session("posicaoVideos")
    Dim objBEVideos As List(Of BEVideo)
    Dim objBEVideo As BEVideo
    Dim booMostra As Boolean
    Dim intImagem As Integer = 3
    ' Os mais Assistidos
    Dim arrExpression() As String = {"v.ranking", "v.id_video"}
    Dim arrDirection() As String = {"DESC", "DESC"}
    objBEVideos = BCVideo.Selecionar(txtVideo.Text, _
                                     IIf(ddlCategoria.SelectedValue = "0", "", ddlCategoria.SelectedItem.Text), _
                                     "", arrExpression, arrDirection)
    While posicao > objBEVideos.Count() - 1 AndAlso posicao > 0
      posicao -= 3
      If posicao < 0 Then posicao = 0
    End While
    Session("posicaoVideosPopulares") = posicao
    For intI As Integer = posicao To posicao + 2
      booMostra = (intI < objBEVideos.Count())
      If booMostra Then
        objBEVideo = objBEVideos(intI)
        arrIdVideo(intImagem) = objBEVideo.IdVideo
      Else
        objBEVideo = Nothing
        arrIdVideo(intImagem) = 0
      End If

      With DirectCast(pangrvRegistros.FindControl("ib_imagem_0" & intImagem), ImageButton)
        If booMostra Then
          .ImageUrl = "~/videos/showThumbImage.aspx?nome=" & IIf(objBEVideo.Imagem.ToString().Length() > 0, objBEVideo.Imagem, "SemImagem.jpg")
        Else
          .ImageUrl = ""
        End If
        .Visible = booMostra
      End With
      With DirectCast(pangrvRegistros.FindControl("lbl_titulo_0" & intImagem), Label)
        If booMostra Then
          .Text = objBEVideo.Titulo
        Else
          .Text = ""
        End If
        .Visible = booMostra
      End With
      With DirectCast(pangrvRegistros.FindControl("lbl_exibido_0" & intImagem), Label)
        If booMostra Then
          .Text = "<strong>" & objBEVideo.Ranking.ToString() + " exibições</strong>"
        Else
          .Text = ""
        End If
        .Visible = booMostra
      End With
      intImagem += 1
    Next
    DirectCast(pangrvRegistros.FindControl("ib_backPopulares"), ImageButton).Enabled = (posicao - 3 >= 0)
    DirectCast(pangrvRegistros.FindControl("ib_nextPopulares"), ImageButton).Enabled = (posicao + 3 <= objBEVideos.Count() - 1)
    Session("posicaoVideos") = arrIdVideo
  End Sub

End Class
